package org.waddy.framework.pub.util.db;

import java.io.*;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.*;
import org.apache.tools.ant.types.*;

/**
 * 调用 ant.jar 的 SQLExec 执行 SQL 脚本文件
 */
public class DbTools extends SQLExec {
	private static final Logger logger = Logger.getLogger(DbTools.class);
	
//	private static final String configFile ="conf/db.properties";
	private String configFile ="db_connection.properties";
	private String script = "";
	
	public void setConfigFile(String configFile) {
		this.configFile = configFile;
	}
	
	public String getScript() {
		return script;
	}
	
	public void setScript(String scriptName){
		this.script = scriptName;
		this.setSrc(new File(scriptName));
	}
	
	public void init(){
		super.init();
		//props.load(new FileInputStream(configFile));
		logger.debug("load "+ configFile +" from classpath ...");
		Properties props = new Properties();
		try {
			props.load(ClassLoader.getSystemResourceAsStream(configFile));
			String url = props.getProperty("jdbc.url");
			logger.debug("jdbc.url=["+url+"]");
			String driver = props.getProperty("jdbc.driver");
			String userid = props.getProperty("jdbc.username");
			// 设置数据库参数
			this.setDriver(driver);
			this.setUrl(url);
			this.setUserid(userid);
			this.setPassword(props.getProperty("jdbc.password"));
			this.setEncoding(props.getProperty("jdbc.encoding"));
			this.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(
					SQLExec.OnError.class, props.getProperty("jdbc.onerror"))));
			this.setPrint(true); 
			// 输出到文件 sql.out 中；不设置该属性，默认输出到控制台
			//this.setOutput(new File("target/sql.log"));
			
			// 要指定这个属性，不然会出错
			this.setProject(new Project()); 
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DbTools dbTools = new DbTools();
		//设置数据库连接文件，可选（默认为classpath下的db_connection.properties）
		dbTools.setConfigFile("db_connection.properties");
		//建立数据库连接
		dbTools.init();
		//设置数据库脚本
		dbTools.setScript("src/test/java/org/framework/test/svc/DataSVCTest.sql");
		//执行数据库脚本
		dbTools.execute();
		System.out.println("---------");
//		dbTools = new DbTools();
//		//设置数据库连接文件，可选（默认为classpath下的db_connection.properties）
//		dbTools.setConfigFile("db_connection.properties");
//		//建立数据库连接
//		dbTools.init();
//		//设置数据库脚本
//		sqlScript = "src/test/java/org/framework/test/svc/DataSVCTest.sql";
//		dbTools.setScript(sqlScript);
		//执行数据库脚本
		dbTools.init();
		dbTools.setScript("src/test/java/org/framework/test/svc/InfoGroupSVCTest.sql");
		dbTools.execute();
	}
	
}